////////////////////////////////////////////////////////////////////////////////

#ifndef _BULLET_H_
#define _BULLET_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _GAMEOBJECT_H_
#include "gameobject.h"
#endif

#include <list>

////////////////////////////////////////////////////////////////////////////////


/** Base class for all bullets
*
*  @author   Anastasia Karpinska
*  @since    Nov 07th, 2009
*  @updated  Nov 12th, 2009
*/
class Bullet : public GameObject
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    Bullet( int _ID,
            PE::Point _position = PE::Point(),
            PE::Vector _velocity = PE::Vector(),
            int _damagev = 0,
            int _playerID = 0 );


    /** Destructor */
    virtual ~Bullet();


    /** Is bullet object */
    virtual bool IsBullet() const;


////////////////////////////////////////////////////////////////////////////////

    /** Informs this object about collision with other object */
    virtual void Collision(const PhysicalObject* _obj);


////////////////////////////////////////////////////////////////////////////////


   /** Gets damage of the bullet */
    int GetDamage() const;


    /** Sets damage of the bullet */
    void SetDamage( int _damage );


    /** Returns player's ID */
    int GetPlayerID() const;


////////////////////////////////////////////////////////////////////////////////


    /** Is the bullet destroyed */
    bool IsDestroyed() const;


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Bullet's damage */
    int m_Damage;


    /** Player's ID */
    int m_PlayerID;


    /** Is the bullet destroyed */
    bool m_IsDestroyed;


////////////////////////////////////////////////////////////////////////////////
};


/** [Utility type]: List of bullets */
typedef std::list<Bullet> BulletsList;


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

